#!C:\perl\bin
use strict;
use warnings;
use lib "/perl/lib";
use Spreadsheet::ParseExcel;
use DBI;
use utf8;
use Encode;

# connection a sql
my $dbh=DBI->connect("DBI:Pg:dbname='mmdn';host=localhost","postgres","mmdn",{'RaiseError'=>1});

# ************************************* Parcours et récupération fichier excel ************************************* #

my $fichier=shift;
my $parser=Spreadsheet::ParseExcel->new();
my $workbook=$parser->parse("$fichier");
if (!defined $workbook){
    die $parser->error(),".\n";
}

my $worksheet;

foreach($workbook->worksheets()){
    $worksheet=$_;
}

my ($row_min,$row_max) = $worksheet->row_range();
my ($col_min, $col_max) = $worksheet->col_range();

for my $row (1 .. $row_max){ #parcours lignes
	my $boite;
	my $histo;
	my $code_autre;
	my $type;
	my $precision;
	my $groupe;
	
    for my $col ($col_min .. $col_max){ #parcours colonnes
		if($col eq 0){ #nom de la boite
			my $cont=$worksheet->get_cell($row,$col);
			$boite=$cont->value();
		}
		elsif($col eq 1){ #code histo
			my $cont=$worksheet->get_cell($row,$col);
			if($cont){
				$histo=$cont->value();
			}
		}
		elsif($col eq 2){ #code autre animalerie
			my $cont=$worksheet->get_cell($row,$col);
			if($cont){
				$code_autre=$cont->value();
			}
		}
		elsif($col eq 3){ #type tissu
			my $cont=$worksheet->get_cell($row,$col);
			if($cont){
				$type=$cont->value();
			}
		}
		elsif($col eq 4){ #precision sur le tissu
			my $cont=$worksheet->get_cell($row,$col);
			if($cont){
				$precision=$cont->value();
			}
		}
		elsif($col eq 5){ #groupe organe
			my $cont=$worksheet->get_cell($row,$col);
			if($cont){
				$groupe=$cont->value();
			}
		}
    }
    
    # ************************************* Création animal ************************************* #
    my $id_anim;
    
	if($histo and not $code_autre){	
		#verification que l'animal n'existe pas
		$id_anim=$dbh->selectrow_array("SELECT id_animal FROM Animal WHERE code_histologique=$histo");
		
		#si l'animal n'existe pas
		if(not $id_anim){ 
			$dbh->do("INSERT INTO Animal(code_histologique) VALUES ($histo)");
			$id_anim=$dbh->selectrow_array("SELECT id_animal FROM Animal WHERE code_histologique=$histo");
		}
	}
	
	elsif($histo and $code_autre){
		#verification que l'animal n'existe pas
		$id_anim=$dbh->selectrow_array("SELECT id_animal FROM Animal WHERE code_histologique=$histo and code_autre_animalerie=(E'$code_autre')");
		
		#si l'animal n'existe pas
		if(not $id_anim){ 
			$dbh->do("INSERT INTO Animal(code_histologique,code_autre_animalerie) VALUES ($histo,'$code_autre')");
			$id_anim=$dbh->selectrow_array("SELECT id_animal FROM Animal WHERE code_histologique=$histo and code_autre_animalerie=(E'$code_autre')");
		}
	}
	
	elsif($code_autre and not $histo){
		#verification que l'animal n'existe pas
		$id_anim=$dbh->selectrow_array("SELECT id_animal FROM Animal WHERE code_autre_animalerie=(E'$code_autre')");
		
		#si l'animal n'existe pas
		if(not $id_anim){ 
			$dbh->do("INSERT INTO Animal(code_autre_animalerie) VALUES ('$code_autre')");
			$id_anim=$dbh->selectrow_array("SELECT id_animal FROM Animal WHERE code_autre_animalerie=(E'$code_autre')");
		}
	}
	
	
	if($id_anim){
		my $new=encode_utf8($type);
		my $new_org=encode_utf8($groupe);
		if($precision){
			my $temp="$type $precision";
			my $new2=encode_utf8($temp);
			
			$dbh->do("INSERT INTO Biobanque(type_tissu,nom_boite,id_animal,groupe_organe) VALUES ('$new2','$boite',$id_anim,'$new_org')");
		}
		else{
			$dbh->do("INSERT INTO Biobanque(type_tissu,nom_boite,id_animal,groupe_organe) VALUES ('$new','$boite',$id_anim,'$new_org')");
		}
	}
}

$dbh->disconnect();
